package com.kehutong.payment.service;

// @WebService("/webservice/payment/payment")
public class PaymentService {}
	
// 	protected Logger logger = LoggerFactory.getLogger(PaymentService.class);
//
// 	@Inject
// 	private PayUrlConfig payConfig;
// 	@Inject
// 	private LogicUrlConfig logicConfig;
// 	@Inject
// 	private JdbcSession jdbcSession;
// 	@Inject
// 	private DataUtil dataUtil;
// 	@Inject
// 	private TencentSignature signature;
// 	@Inject
// 	private AccoutService accoutService;
// 	@Inject
// 	private ChargeBillService chargeBillService;
// 	@Inject
// 	private MchService mchService;
// 	@Inject
// 	private ChargeTemporaryService chargeTemporaryService;
//
// 	@Inject
// 	private MerchantSettingService merchantSettingService;
//
// 	@Inject
// 	private Oauth2Service oauth2Service;
// 	@Inject
// 	private MpChatSettingService mpChatSettingService;
//
// 	String serialNo;
//
// 	/**
// 	 * 充值
// 	 */
// 	public Object reCharge(HttpServletRequest req, String contactId, String houseNo, BigDecimal amt) throws Exception {
// 		if (Objects.isEmpty(contactId)) {
// 			return Result.unlogin();
// 		}
// 		if (amt == null) {
// 			return Result.error(0, "请输入充值金额");
// 		}
// 		if (CalculatorUtils.getDecimalPlace(amt) > 2) {
// 			return Result.error(0, "金额小数位最多支持2位");
// 		}
// 		if (amt.compareTo(BigDecimal.ZERO) < 0) {
// 			return Result.error(0, "金额必须为正数");
// 		}
//
// 		if (Objects.isEmpty(houseNo)) {
// 			return Result.error(0, "请选择要充值的房屋");
// 		}
//
// 		WebChat c = Pool.get(WebChat.class, contactId);
// 		if (Objects.isNull(c)) {
// 			return Result.error(0, "不存在的外部联系人");
// 		}
//
// 		House house = Pool.get(House.class, houseNo);
// 		if (Objects.isNull(house)) {
// 			return Result.error(0, "不存在的房屋");
// 		}
//
// 		Community community = Pool.get(Community.class, house.getCommunityNo());
// 		if (community == null) {
// 			return Result.error(0, "不存在的小区");
// 		}
//
// 		CallBackReturn<JSONResult> called = ()-> {
// 			ChargeRecord cr = Pool.newInstance(ChargeRecord.class);
// 			cr.setCompanyNo(community.getCompanyNo());
// 			cr.setCommunityNo(house.getCommunityNo());
// 			cr.setCommunityName(house.getCommunityName());
// 			cr.setHouseNo(houseNo);
// 			cr.setMbrCode(c.getId());
// 			cr.setMbrName(c.getNickName());
// 			cr.setMobile(c.getMobile());
// 			cr.setAvatar(c.getAvatar());
// 			cr.setAmt(amt);
// 			cr.setTradeType("JSAPI");
// 			cr.setOpenid(c.getOpenId());
// 			cr.setBizType(WaterSource.CHONGZHI);
//
// 			return createUnifiedOrderByChargeRecord(req, cr, "物业费预存", cr.getId());
// 		};
//
// 		return Locks.exeSyn(contactId, called);
//
// 	}
//
// 	/**
// 	 * 以ChargeRecord信息调用微信统一下单API
// 	 */
// 	public JSONResult createUnifiedOrderByChargeRecord(HttpServletRequest req, ChargeRecord chargeRecord, String body, String attch) throws Exception {
// 		Merchant merchant = mchService.getMerchat(chargeRecord.getCompanyNo(), chargeRecord.getCommunityNo());
//
// 		PayData data;
// 		JSONObject jsonObject;
// 		if (Objects.isEmpty(merchant.getSubMchId())) {
// 			data = new PayWebChatData(
// 					merchant.getAppId(),
// 					merchant.getMchId(),
// 					null,
// 					body,
// 					chargeRecord.getId(),
// 					chargeRecord.getAmt().multiply(new BigDecimal(100)).longValue(),
// 					logicConfig.getUrl("/app/webchat/payment/callBack"),
// 					attch,
// 					getAddr(req),
// 					chargeRecord.getOpenid(),
// 					chargeRecord.getTradeType(),
// 					chargeRecord.getProductId()
// 			);
// 			data.setSign(data.md5Encode(merchant.getMchSecret()));
// 			jsonObject = payConfig.postXML("/pay/unifiedorder", http -> {
// 				http.setBody(data.toXml());
// 			});
// 		} else {
// 			data = new PayMchData(
// 					merchant.getAppId(),
// 					merchant.getMchId(),
// 					merchant.getSubMchId(),
// 					null,
// 					body,
// 					attch,
// 					chargeRecord.getId(),
// 					chargeRecord.getAmt().multiply(new BigDecimal(100)).intValue(),
// 					getAddr(req),
// 					logicConfig.getUrl("/app/webchat/payment/callBack"),
// 					chargeRecord.getTradeType(),
// 					chargeRecord.getOpenid());
// 			data.setSign(data.md5Encode(merchant.getMchSecret()));
// 			jsonObject = payConfig.postXML("/pay/unifiedorder", http -> {
// 				http.setBody(data.toXml());
// 			});
// 		}
//
// 		logger.trace("#######################微信回调本地解析后结果: {} ##########################", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 			String nonce_str = data.getNonce_str();
// 			String prepay_id = jsonObject.getString("prepay_id");
// 			String codeUrl = jsonObject.getString("code_url");
// 			long ts = TimeUtil.timeSec();
//
// 			JSONObject resultJson = new JSONObject();
//
// 			resultJson.put("appId", merchant.getAppId());
// 			resultJson.put("nonceStr", nonce_str);
// 			resultJson.put("package", "prepay_id=" + prepay_id);
// 			resultJson.put("signType", "MD5");
// 			resultJson.put("timeStamp", ts);
// 			resultJson.put("paySign", getSign0(merchant.getAppId(), merchant.getMchSecret(), nonce_str, prepay_id, ts));
// 			resultJson.put("orderNo", chargeRecord.getId());
// 			resultJson.put("codeUrl", codeUrl);
//
// 			// 记录收款的商户id
// 			chargeRecord.setMchId(merchant.getMchId());
// 			chargeRecord.setMchName(merchant.getMchName());
// 			chargeRecord.setPrepayId(prepay_id);
// 			chargeRecord.setCodeUrl(codeUrl);
// 			chargeRecord.setSubMchId(jsonObject.getString("sub_mch_id"));
// 			chargeRecord.setSubmchName(merchant.getSubMchName());
//
// 			jdbcSession.insert(chargeRecord);
// 			logger.trace("#######################微信回调本地解析成功：{}##########################", resultJson.toJSONString());
// 			return Result.success(resultJson);
// 		}
//
// 		return Result.error(1401, jsonObject.getString("return_msg"));
// 	}
//
// 	/**
// 	 * 支付回调
// 	 */
// 	public Object callBack(JSONObject jsonObject) throws Exception {
// //		    <xml><appid><![CDATA[wxaed336631569517c]]></appid>
// //		    <attach><![CDATA[8aee9c1804f3bad9eeb2671c3e8a88f9]]></attach>
// //		    <bank_type><![CDATA[OTHERS]]></bank_type>
// //		    <cash_fee><![CDATA[2]]></cash_fee>
// //		    <fee_type><![CDATA[CNY]]></fee_type>
// //		    <is_subscribe><![CDATA[Y]]></is_subscribe>
// //		    <mch_id><![CDATA[1595960421]]></mch_id>
// //		    <nonce_str><![CDATA[3486110230694004048]]></nonce_str>
// //		    <openid><![CDATA[oMB0d1eEhAFQXYGi_I-B881s-1jQ]]></openid>
// //		    <out_trade_no><![CDATA[8aee9c1804f3bad9eeb2671c3e8a88f9]]></out_trade_no>
// //		    <result_code><![CDATA[SUCCESS]]></result_code>
// //		    <return_code><![CDATA[SUCCESS]]></return_code>
// //		    <sign><![CDATA[BF568D553FEA01C68844A96A8894520D]]></sign>
// //		    <time_end><![CDATA[20200710141423]]></time_end>
// //		    <total_fee>2</total_fee>
// //		    <trade_type><![CDATA[JSAPI]]></trade_type>
// //		    <transaction_id><![CDATA[4200000584202007100149868828]]></transaction_id>
// //		    </xml>
// 		//附加属性，原样返回
// 		String attach = jsonObject.getString("attach");
// 		String chargeRecordId = jsonObject.getString("out_trade_no");
//
// 		ChargeRecord cr = Pool.get(ChargeRecord.class, chargeRecordId);
// 		if (Objects.isNull(cr)) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "ERROR DATA FAIL");
// 			return Result.text(result);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(cr.getCompanyNo(), cr.getCommunityNo());
// 		if (!signature.checkIsSignValidFromResponseString(jsonObject, merchant.getMchSecret())) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "SIGN CHECK FAIL");
// 			return Result.text(result);
// 		}
//
//
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		CallBackNoReturn called = ()->{
// 			if (!cr.isResult()) {
// 				// 付款人openid
// 				final String openid = jsonObject.getString("openid");
// 				String transactionId = jsonObject.getString("transaction_id");
// 				WebChat contact = chargeBillService.findContactByCompanyNoAndOpenId(cr.getCompanyNo(), openid);
// 				if (contact != null) {
// 					cr.setMbrCode(contact.getId());
// 					cr.setMbrName(contact.getNickName());
// 					cr.setMobile(contact.getMobile());
// 					cr.setAvatar(contact.getAvatar());
// 				}
//
// 				cr.setExChangeCode(transactionId.trim());
// 				cr.setBankType(jsonObject.getString("bank_type"));
// 				cr.setOpenid(openid);
// 				cr.setTransactionId(transactionId);
// 				cr.setChargeTime(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("time_end")));
// 				cr.setResult(true);
// 				cr.setRemark(String.format("微信交易流水号：%s", transactionId));
// 				jdbcSession.updateById(cr);
//
// 				// 支付通知成功后 根据bizType执行对应逻辑
// 				doBizAfterNotice(cr, attach);
// 			}
// 		};
//
// 		Locks.exeSyn(cr.getId(), called);
//
// 		String result = dataUtil.getMessage(TencentPayResult.SUCCESS, "SUCCUSS");
// 		return Result.text(result);
// 	}
//
// 	//	public Object doReturnDeposit(String tradeCode, long refundFree, long totalAmt) throws Exception {
// //			//配置退款参数
// //			TencentRefundData refundData = new TencentRefundData(
// //						config.getApp_id(),
// //						config.getMch_id(),
// //						tradeCode,
// //						UUIDGenerator.randomUUID(),
// //						totalAmt,
// //						refundFree,
// //						null);
// //			refundData.setSign(refundData.preparedMD5Str(config.getMch_secret()));
// //
// //
// //			HttpsClient httpsClient = new HttpsClient();
// //
// //			/*begin 创建并设置http参数*/
// //			SSLContext sslContext = getKmsFactory();
// //			httpsClient.setSsfFactory(sslContext.getSocketFactory());
// //			httpsClient.setReadTimeOut(config.getHttpReadTimeoutMs());
// //			httpsClient.setConnectTimeOut(config.getHttpConnectTimeoutMs());
// //			/*end*/
// //
// //	  		/*begin 很重要，用来检测 sdk 的使用情况，要不要加上商户信息？*/
// //	        httpsClient.addHeader("Content-Type", "text/xml");
// //	        httpsClient.addHeader("User-Agent", "wxpay sdk java v1.0 " + config.getMch_id());
// //	        /*end*/
// //
// //	        //退款参数转成xml格式
// //	        String refundXml = refundData.toXmlXML();
// //	        httpsClient.setBody(refundXml);
// //
// //	        String returnMsg = httpsClient.post(config.getRefund_url());
// //			logger.trace("#######################微信退款回调结果: {} ##########################", returnMsg);
// //			JSONObject rsjson = dataUtil.xml2Json(returnMsg);
// //
// //			logger.trace("#######################微信退款回调本地解析后结果: {} ##########################", rsjson.toJSONString());
// //
// //			if (TencentPayResult.isOk(rsjson, "return_code")) {
// //				String nonce_str = refundData.getNonce_str();
// //				long ts = TimeUtil.timeSec();
// //
// //			    JSONObject resultJson = new JSONObject();
// //
// //			    resultJson.put("appId", config.getApp_id());
// //			    resultJson.put("nonceStr", nonce_str);
// //			    resultJson.put("signType", "MD5");
// //			    resultJson.put("timeStamp", ts);
// //			    logger.trace("#######################微信退款回调本地解析成功：{}##########################", resultJson.toJSONString());
// //			}
// //
// //			//退款业务是否成功
// //		    if(TencentPayResult.isOk(rsjson, "result_code")){
// //		    	// TODO 记录流水
// //		    	logger.trace("#######################微信退款业务成功：{}##########################", rsjson.toJSONString());
// //		    	return Result.success(rsjson);
// //		    }else{
// //		    	logger.trace("#######################微信退款业务失败：{}##########################", rsjson.getString("err_code_des"));
// //		    	return Result.error(1402, rsjson.getString("err_code_des"));
// //		    }
// //		}
// //
// 	private String getSign0(String appId, String mchSecret, String nonce_str, String prepay_id, long ts) {
// 	        StringBuffer signBuf = new StringBuffer();
//
// 	        signBuf.append("appId=").append(appId).append("&");
// 	        signBuf.append("nonceStr=").append(nonce_str).append("&");
// 	        signBuf.append("package=prepay_id=").append(prepay_id).append("&");
// 	        signBuf.append("signType=MD5").append("&");
// 	        signBuf.append("timeStamp=").append(ts).append("&");
// 	        signBuf.append("key=").append(mchSecret);
//
// 	        return MD5.MD5Encode(signBuf.toString()).toLowerCase();
// 	    }
//
//
// 	public Object create(ReqPayParam reqPayParam, String companyNo) throws Exception {
// 		Merchant merchant = mchService.getMerchat(companyNo, reqPayParam.getCommunityNo());
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
// 		ThirdOrder thirdOrder = getThirdOrder(merchant.getSubMchId(), null, reqPayParam.getSubOrderNo(), null);
// 		if (Objects.nonNull(thirdOrder)){
// 			return Result.error(215008, "subOrderNo已存在，请更换后重试");
// 		}
//
// 		String orderSn = IdGeneratorUtil.generate();
// 		// 创建订单
// 		thirdOrder = Pool.newInstance(ThirdOrder.class, orderSn);
// 		thirdOrder.setAppId(merchant.getAppId());
// 		thirdOrder.setMchId(merchant.getMchId());
// 		thirdOrder.setSubMchId(reqPayParam.getSubMchId());
// 		thirdOrder.setSubOrderNo(reqPayParam.getSubOrderNo());
// 		thirdOrder.setPayType(PayTypeEnum.wxpay_wap);
// 		thirdOrder.setOrderFee(reqPayParam.getTotalFee());
// 		thirdOrder.setPaid(false);
// 		thirdOrder.setCallbackUrl(reqPayParam.getCallbackUrl());
// 		thirdOrder.setPayerUser(reqPayParam.getSubOpenid());
// 		thirdOrder.setIp(reqPayParam.getIp());
// 		thirdOrder.setAttach(reqPayParam.getAttach());
// 		thirdOrder.setCompanyNo(companyNo);
// 		thirdOrder.setCommunityNo(reqPayParam.getCommunityNo());
// 		jdbcSession.insert(thirdOrder);
//
// 		// 向微信支付下单
// 		PayData data = new PayMchData(
// 			merchant.getAppId(),
// 			merchant.getMchId(),
// 			reqPayParam.getSubMchId(),
// 			null,
// 			reqPayParam.getBody(),
// 			reqPayParam.getAttach(),
// 			orderSn,
// 			reqPayParam.getTotalFee(),
// 			reqPayParam.getIp(),
// 			logicConfig.getUrl("/oau-kht/pay/callback"),
// 			"JSAPI",
// 			reqPayParam.getSubOpenid());
// 		data.setSign(data.md5Encode(merchant.getMchSecret()));
//
// 		JSONObject jsonObject = payConfig.postXML("/pay/unifiedorder",
// 			http -> {
// 				http.setBody(data.toXml());
// 			});
// 		logger.trace("#######################微信创建订单回调本地解析后结果: {} ##########################", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 			String prepay_id = jsonObject.getString("prepay_id");
// 			String codeUrl = jsonObject.getString("code_url");
// 			long ts = TimeUtil.timeSec();
//
// 			// 返回参数到前端
// 			JSONObject resultJson = new JSONObject();
// 			resultJson.put("appId", merchant.getAppId());
// 			resultJson.put("nonceStr", data.getNonce_str());
// 			resultJson.put("package", "prepay_id=" + prepay_id);
// 			resultJson.put("signType", "MD5");
// 			resultJson.put("timeStamp", ts);
// 			resultJson.put("paySign", getSign0(merchant.getAppId(), merchant.getMchSecret(), data.getNonce_str(), prepay_id, ts));
// 			resultJson.put("orderNo", orderSn);
// 			resultJson.put("codeUrl", codeUrl);
// 			logger.trace("#######################微信回调本地解析成功：{}##########################", resultJson.toJSONString());
// 			return Result.success(resultJson);
// 		}
//
// 		return Result.error(215002, jsonObject.getString("return_msg"));
// 	}
//
//
// 	public Object queryOrder(String subMchId, String orderNo, String subOrderNo, String outSn, String companyNo, String communityNo) throws Exception {
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdOrder order = getThirdOrder(subMchId, orderNo, subOrderNo, outSn);
// 		if (Objects.isNull(order)) {
// 			return Result.error(215004, "订单不存在，请检查相关参数后重试");
// 		}
//
// 		if (order.isPaid()){
// 			return Result.success(getPaidResult(order));
// 		} else {
// 			PayMchQueryData data = new PayMchQueryData(merchant.getAppId(), merchant.getMchId(), subMchId, null, order.getId());
// 			data.setSign(data.md5Encode(merchant.getMchSecret()));
// 			JSONObject jsonObject = payConfig.postXML("/pay/orderquery",
// 				http -> {
// 					http.setBody(data.toXml());
// 				});
// 			if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 				&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("trade_state"))
// 			) {
// 				setPaidOrder(order, jsonObject);
// 				jdbcSession.updateById(order);
// 				return Result.success(getPaidResult(order));
// 			}
// 			return Result.error(215005, "该订单支付失败，请确认订单是否支付完成");
// 		}
// 	}
//
// 	private void setPaidOrder(ThirdOrder order, JSONObject jsonObject) {
// 		order.setPaid(true);
// 		order.setOutSn(jsonObject.getString("transaction_id"));
// 		order.setPayTime(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("time_end")));
// 		order.setBankType(jsonObject.getString("bank_type"));
// 	}
//
// 	private void setPaidContractEntrustOrder(ContractEntrustOrder order, JSONObject jsonObject) {
// 		order.setPaid(true);
// 		order.setOutSn(jsonObject.getString("transaction_id"));
// 		order.setPayTime(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("time_end")));
// 		order.setBankType(jsonObject.getString("bank_type"));
// 	}
//
// //	private void setRefundPaidOrder(ThirdRefundOrder order, JSONObject jsonObject) {
// //		order.setRefunded(true);
// //		order.setRefundOutSn(jsonObject.getString("transaction_id"));
// //		// order.setPayTime(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("time_end")));
// //		// order.setBankType(jsonObject.getString("bank_type"));
// //		// order.setAttach(jsonObject.getString("attach"));
// //	}
//
//
// 	public Object refundOrder(ReqPayRefundParam param, String companyNo) throws Exception {
// 		Merchant merchant = mchService.getMerchat(companyNo, param.getCommunityNo());
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdOrder order = getThirdOrder(param.getSubMchId(), param.getOrderNo(), param.getSubOrderNo(), param.getOutSn());
// 		if (Objects.isNull(order)){
// 			return Result.error(215004, "订单不存在，请检查相关参数后重试");
// 		}
//
// 		if (!order.isPaid()){
// 			return Result.error(215005, "该订单支付失败，请确认订单是否支付完成");
// 		}
// 		if(order.getOrderFee() < param.getRefundFee()){
// 			return Result.error(215006, "退款金额不能大于支付金额");
// 		}
// 		ThirdRefundOrder refundOrder = getThirdRefundOrder(merchant.getSubMchId(), null, param.getSubOrderNo(), null, null, null);
// 		if (Objects.nonNull(refundOrder)) {
// 			return Result.error(215006, "该笔订单已发起退款，请勿重复发起");
// 		} else {
// 			String refundOrderNo = IdGeneratorUtil.generate();
// 			refundOrder = Pool.newInstance(ThirdRefundOrder.class, refundOrderNo);
// 			refundOrder.setOrderNo(order.getId());
// 			refundOrder.setOrderFee(order.getOrderFee());
// 			refundOrder.setAppId(merchant.getAppId());
// 			refundOrder.setMchId(merchant.getMchId());
// 			refundOrder.setSubMchId(param.getSubMchId());
// 			refundOrder.setSubRefundNo(param.getSubRefundNo());
// 			refundOrder.setRefunded(false);
// 			refundOrder.setCallbackUrl(param.getCallbackUrl());
// 			refundOrder.setRefundFee(param.getRefundFee());
// 			jdbcSession.insert(refundOrder);
// 		}
// 		PayMchRefundData data = new PayMchRefundData(
// 			merchant.getAppId(),
// 			merchant.getMchId(),
// 			param.getSubMchId(),
// 			null,
// 			logicConfig.getUrl("/oau-kht/pay/refund/callback"),
// 			order.getId(),
// 			order.getOutSn(),
// 			refundOrder.getId(),
// 			order.getOrderFee(),
// 			param.getRefundFee());
// 		data.setSign(data.md5Encode(merchant.getMchSecret()));
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/refund",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> {
// 				http.setBody(data.toXml());
// 			});
// 		// 退款相关
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 			refundOrder.setRefundOutSn(jsonObject.getString("transaction_id"));
// 			jdbcSession.updateById(refundOrder);
//
// 			JSONObject resultJson = new JSONObject();
// 			resultJson.put("refundOutSn", refundOrder.getRefundOutSn());
// 			resultJson.put("refundNo", refundOrder.getId());
// 			resultJson.put("subRefundNo", refundOrder.getSubRefundNo());
// 			resultJson.put("errorCode", jsonObject.getString("err_code"));
//
// 			return Result.success(resultJson);
// 		}
// 		return Result.error(215007, jsonObject.getString("return_msg"));
// 	}
//
//
// 	public Object callback(JSONObject jsonObject) throws Exception {
// 		String orderSn = jsonObject.getString("out_trade_no");
//
// 		ThirdOrder order = Pool.get(ThirdOrder.class, orderSn);
// 		if (Objects.isNull(order)) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "ERROR DATA FAIL");
// 			return Result.text(result);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(order.getCompanyNo(), order.getCommunityNo());
// 		if (!signature.checkIsSignValidFromResponseString(jsonObject, merchant.getMchSecret())) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "SIGN CHECK FAIL");
// 			return Result.text(result);
// 		}
//
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		CallBackReturn<String> called = () -> {
// 			if (!order.isPaid()) {
// 				int sendCount = order.getSendCount();
// 				if (sendCount < 15) { // 默认通知15次，通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h
// 					order.setSendCount(++sendCount);
//
// 					JSONObject resultJson = getPaidResult(order);
// 					HttpClient httpClient = HttpClient.create(order.getCallbackUrl());
// 					httpClient.setBody(resultJson.toJSONString());
//
// 					String text = httpClient.get();
// 					if ("SUCCESS".equalsIgnoreCase(text)){
// 						setPaidOrder(order, jsonObject);
// 						jdbcSession.updateById(order);
// 						String result = dataUtil.getMessage(TencentPayResult.SUCCESS, "SUCCESS");
// 						return result;
// 					}
// 					jdbcSession.updateById(order);
// 				}
// 			}
// 			return null;
// 		};
//
// 		String resultText = (String)Locks.exeSyn(orderSn, called);
// 		if (Objects.nonEmpty(resultText)) {
// 			return Result.text(resultText);
// 		}
//
// 		// 默认失败，使用微信的通知次数
// 		String result = dataUtil.getMessage(TencentPayResult.FAIL, "FAIL");
// 		return Result.text(result);
// 	}
//
// 	private JSONObject getPaidResult(ThirdOrder order) {
// 		JSONObject resultJson = new JSONObject();
// 		resultJson.put("outSn", order.getOutSn());
// 		resultJson.put("orderNo", order.getId());
// 		resultJson.put("subOrderNo", order.getSubOrderNo());
// 		resultJson.put("payTime", order.getPayTime());
// 		resultJson.put("orderFee", order.getOrderFee());
// 		resultJson.put("paid", true);
// 		return resultJson;
// 	}
//
//
// 	public Object refundCallback(JSONObject jsonObject) throws Exception {
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))){
// 			String orderSn = jsonObject.getString("out_trade_no");
// 			ThirdRefundOrder refundOrder = Pool.get(ThirdRefundOrder.class, orderSn);
// 			if (Objects.isNull(refundOrder)) {
// 				String result = dataUtil.getMessage(TencentPayResult.FAIL, "ERROR DATA FAIL");
// 				return Result.text(result);
// 			}
//
// //			Merchant merchant = mchService.getMerchat(refundOrder.getCompanyNo(), refundOrder.getCommunityNo());
//
// 			/** 以下字段在return_code为SUCCESS的时候有返回： **/
// 			// 加密信息：加密信息请用商户秘钥进行解密，详见解密方式
// //			String req_info = Base64Coder.decodeString(jsonObject.getString("req_info"));
// //			String key = MD5.MD5Encode(merchant.getMchSecret());
//
// 			// TODO:后续实现
// 		}
// 		return null;
// 	}
//
//
// 	public JSONResult queryRefundOrder(String subMchId, String subRefundNo, String refundNo, String refundOutSn, String companyNo, String communityNo) throws Exception {
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdRefundOrder refundOrder = getThirdRefundOrder(subMchId, refundNo, subRefundNo, refundOutSn, null, null);
// 		if (Objects.isNull(refundOrder)) {
// 			return Result.error(215004, "订单不存在，请检查相关参数后重试");
// 		}
//
// 		if(refundOrder.isRefunded()){
// 			return Result.success();
// 		}else {
// 			PayMchQueryData data = new PayMchQueryData(merchant.getAppId(), merchant.getMchId(), subMchId, null, refundOrder.getOrderNo());
// 			data.setSign(data.md5Encode(merchant.getMchSecret()));
// 			JSONObject jsonObject = payConfig.postXML("/pay/refundquery",
// 				http -> {
// 					http.setBody(data.toXml());
// 				});
// 			if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 				// setPaidOrder(refundOrder, jsonObject);
// 				jdbcSession.updateById(refundOrder);
// 				return Result.success();
// 			}
// 			return Result.error(215005, "该订单支付失败，请确认订单是否支付完成");
// 		}
// 	}
//
//
// 	public Object contractOrder(Map<String, String> params, String companyNo) throws Exception {
// 		// 142124 子商户--1603460043
// 		// 142174 服务商--1603460043
// 		String out_trade_no = params.get("out_trade_no");
// 		String sub_mch_id = params.get("sub_mch_id");
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchatByMp(companyNo, null);
//
// 		ThirdOrder thirdOrder = getThirdOrder(sub_mch_id, null, out_trade_no, null);
// 		if (Objects.nonNull(thirdOrder)){
// 			return Result.error(215008, "out_trade_no已存在，请更换后重试");
// 		}
//
// 		// 业务参数不参与签名
// 		params.remove("pay_type");
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params.put("notify_url", logicConfig.getUrl("/oau-kht/pay/v2/callback")); // 通知地址重置成我们的接口
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/unifiedorder", http -> http.setBody(toXml));
//
// 		logger.trace("#######################微信创建订单回调本地解析后结果: {} ##########################", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 			String prepay_id = jsonObject.getString("prepay_id");
// 			String codeUrl = jsonObject.getString("code_url");
// 			long ts = TimeUtil.timeSec();
//
// 			// 返回参数到前端
// 			JSONObject resultJson = new JSONObject();
// 			resultJson.put("appId", merchant.getAppId());
// 			resultJson.put("nonceStr", nonce_str);
// 			resultJson.put("package", "prepay_id=" + prepay_id);
// 			resultJson.put("signType", SignType.MD5);
// 			resultJson.put("timeStamp", ts);
// 			resultJson.put("paySign", getSign0(merchant.getAppId(), merchant.getMchSecret(), nonce_str, prepay_id, ts));
// 			resultJson.put("orderNo", out_trade_no);
// 			resultJson.put("codeUrl", codeUrl);
// 			logger.trace("#######################微信回调本地解析成功：{}##########################", resultJson.toJSONString());
// 			return Result.success(resultJson);
// 		}
//
// 		return Result.error(215002, jsonObject.getString("return_msg"));
// 	}
//
//
// 	public Object webContract(Map<String, String> params, String companyNo) throws Exception {
// 		return null;
// 	}
//
//
// 	public Object mpContract(Map<String, String> extraData, String companyNo, String communityNo) throws Exception {
// 		String sub_mch_id = extraData.get("sub_mch_id");
// 		String plan_id = extraData.get("plan_id");
// 		String contract_code = extraData.get("contract_code");
// 		String notify_url = extraData.get("notify_url");
//
// 		if (Objects.isEmpty(plan_id)
// 			|| Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(contract_code)
// 			|| Objects.isEmpty(notify_url)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchatByMp(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ContractEntrust contractEntrust = getContractEntrust(sub_mch_id, plan_id, contract_code);
//
// 		if (Objects.isNull(contractEntrust)){
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		contractEntrust = Pool.newInstance(ContractEntrust.class);
// 		contractEntrust.setAppId(merchant.getAppId());
// 		contractEntrust.setMchId(merchant.getMchId());
// 		contractEntrust.setSubAppId(extraData.get("sub_appid"));
// 		contractEntrust.setSubMchId(extraData.get("sub_mch_id"));
// 		contractEntrust.setPlanId(extraData.get("plan_id"));
// 		contractEntrust.setContractDisplay(extraData.get("contract_display_account"));
// 		contractEntrust.setContractCode(extraData.get("contract_code"));
// 		contractEntrust.setOpenId(extraData.get("openid"));
// 		contractEntrust.setChangeType("INIT");
// 		contractEntrust.setCallbackUrl(notify_url);
// 		jdbcSession.insert(contractEntrust);
//
// 		extraData.put("appid", merchant.getAppId());
// 		extraData.put("mch_id", merchant.getMchId());
//
// 		extraData = WxPayUtil.buildSign(extraData, merchant.getMchSecret(), SignType.MD5, false);
// 		String toXml = PayUtil.toXml(extraData);
// 		return XmlUtil.xml2JSON(toXml);
// 	}
//
//
// 	public Object termination(JSONObject jsonObject) throws Exception {
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		ContractEntrust contractEntrust = getContractEntrust(jsonObject.getString("sub_mch_id"), jsonObject.getString("plan_id"), jsonObject.getString("contract_code"));
//
// 		if (Objects.isNull(contractEntrust)){
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			contractEntrust.setChangeType(jsonObject.getString("change_type"));
// 			contractEntrust.setOperateTime(jsonObject.getString("operate_time"));
// 			contractEntrust.setContractId(jsonObject.getString("contract_id"));
// 			contractEntrust.setOpenId(jsonObject.getString("openid"));
// 			contractEntrust.setSubOpenId(jsonObject.getString("sub_openid"));
// 			contractEntrust.setContractTerminationMode(jsonObject.getIntValue("contract_termination_mode"));
// 			jdbcSession.updateById(contractEntrust);
//
// 			HttpClient httpClient = HttpClient.create(contractEntrust.getCallbackUrl());
// 			httpClient.setBody(jsonObject.toJSONString());
// 			String text = httpClient.get();
// 			if ("SUCCESS".equalsIgnoreCase(text)){
// 				String result = dataUtil.getMessage(TencentPayResult.SUCCESS, "OK");
// 				return Result.text(result);
// 			}
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
// 	private ContractEntrust getContractEntrust(String sub_mch_id, String plan_id, String contract_code) {
// 		FindOne<ContractEntrust> findOne = jdbcSession.findOne(ContractEntrust.class)
// 													  .eq("subMchId", sub_mch_id)
// 													  .eq("planId", plan_id)
// 													  .eq("contractCode", contract_code);
//
// 		return findOne.exe();
// 	}
// 	private ContractEntrust getContractEntrust(String sub_mch_id, String contract_id) {
// 		FindOne<ContractEntrust> findOne = jdbcSession.findOne(ContractEntrust.class)
// 													  .eq("subMchId", sub_mch_id)
// 													  .eq("contractId", contract_id);
//
// 		return findOne.exe();
// 	}
//
//
// 	public Object preContractNotify(JSONObject jsonObject, String contractId, String companyNo, String communityNo) throws Exception {
// 		ContractEntrust contractEntrust = getContractEntrust(jsonObject.getString("sub_mchid"), contractId);
// 		if (Objects.isNull(contractEntrust)){
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		// 非签约用户直接阻断流程
// 		if (!"ADD".equalsIgnoreCase(contractEntrust.getChangeType())) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		jsonObject.put("sp_mchid", merchant.getMchId());
// 		jsonObject.put("sp_appid", merchant.getAppId());
//
// 		long timestamp = TimeUtil.timeSec();
// 		String nonceStr = PayUtil.generateNonceStr();
//
// 		String postUrl = "/v3/partner-papay/contracts/" + contractId + "/notify";
// 		String serialNo = WxPayUtil.getSerialNumber(merchant.getPemInput());
// 		String authorization = WxPayUtil.getAuthorization(RequestMethod.POST.name(), postUrl, jsonObject.toJSONString(),
// 			PayUtil.getPrivateKey(merchant.getKeyPemInput()), merchant.getMchId(), nonceStr, timestamp, serialNo);
//
// 		// v3接口请求头
// 		Map<String, String> headers = new HashMap<>();
// 		headers.put("Accept", "application/json");
// 		headers.put("Content-Type", "application/json");
// 		headers.put("Authorization", authorization);
// 		headers.put("Wechatpay-Serial", serialNo);
//
// 		HttpClient httpClient = HttpClient.create(payConfig.getUrl(postUrl));
// 		httpClient.setHeaders(headers);
// 		httpClient.setBody(jsonObject.toJSONString());
// 		String text = httpClient.post();
// 		int httpStatus = httpClient.getResponseCode();
// 		logger.info("=================={}-----------{}--------{}--------", text, httpStatus ,serialNo);
// 		if (httpStatus>=200 && httpStatus<300){
// 			PayResult.success();
// 		}
// 		return PayResult.error(PayErrorCode.E215001, text);
// 	}
//
//
// 	public Object contractOrder(Map<String, String> params, String companyNo, String communityNo, String chargeTypeId) throws Exception {
// 		String out_trade_no = params.get("out_trade_no");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String body = params.get("body");
// 		String total_fee = params.get("total_fee");
// 		String spbill_create_ip = params.get("spbill_create_ip");
// 		String notify_url = params.get("notify_url");
// 		String sub_appid = params.get("sub_appid");
// 		String contract_id = params.get("contract_id");
//
// 		if (Objects.isEmpty(out_trade_no)
// 			|| Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(body)
// 			|| Objects.isEmpty(total_fee)
// 			|| Objects.isEmpty(spbill_create_ip)
// 			|| Objects.isEmpty(notify_url)
// 			|| Objects.isEmpty(contract_id)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ContractEntrust contractEntrust = jdbcSession.findOne(ContractEntrust.class)
// 												   .eq("subMchId", sub_mch_id)
// 												   .eq("contractId", contract_id)
// 												   .exe();
// 		if (Objects.isNull(contractEntrust)){
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			params.put("nonce_str", PayUtil.generateNonceStr());
// 		}
//
// 		ContractEntrustOrder contractEntrustOrder = getContractEntrustOrder(sub_mch_id, null, out_trade_no, null);
// 		if (Objects.nonNull(contractEntrustOrder)){
// 			return Result.error(215008, "out_trade_no已存在，请更换后重试");
// 		}
//
// 		String orderSn = IdGeneratorUtil.generate();
// 		// 创建订单
// 		contractEntrustOrder = Pool.newInstance(ContractEntrustOrder.class, orderSn);
// 		contractEntrustOrder.setAppId(merchant.getAppId());
// 		contractEntrustOrder.setSubAppId(sub_appid);
// 		contractEntrustOrder.setMchId(merchant.getMchId());
// 		contractEntrustOrder.setSubMchId(sub_mch_id);
// 		contractEntrustOrder.setSubOrderNo(out_trade_no);
// 		contractEntrustOrder.setOrderFee(Integer.parseInt(total_fee));
// 		contractEntrustOrder.setPaid(false);
// 		contractEntrustOrder.setIp(spbill_create_ip);
// 		contractEntrustOrder.setAttach(params.get("attach"));
// 		contractEntrustOrder.setCompanyNo(companyNo);
// 		contractEntrustOrder.setCommunityNo(communityNo);
// 		contractEntrustOrder.setChargeTypeId(chargeTypeId);
// 		contractEntrustOrder.setContractId(contract_id);
// 		contractEntrustOrder.setCallbackUrl(notify_url);
// 		jdbcSession.insert(contractEntrustOrder);
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params.put("notify_url", logicConfig.getUrl("/oau-kht/pay/v2/contract/callback")); // 通知地址重置成我们的接口
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject rs = XmlUtil.xml2JSON(toXml);
// 		logger.info("==========代扣申请扣款参数：{}=============", rs.toJSONString());
// 		JSONObject jsonObject = payConfig.postXML("/pay/partner/pappayapply",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> http.setBody(toXml));
// 		logger.info("============代扣申请扣款返回：{}=============", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			return PayResult.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object contractCallback(JSONObject jsonObject) throws Exception {
// 		String orderSn = jsonObject.getString("out_trade_no");
//
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		CallBackReturn<String> result = ()->{
// 			logger.info("=========v2Callback:{}=========", jsonObject.toJSONString());
// 			String sub_mch_id = jsonObject.getString("sub_mch_id");
// 			String transaction_id = jsonObject.getString("transaction_id");
// 			String total_fee = jsonObject.getString("total_fee");
// 			ContractEntrustOrder order = getContractEntrustOrder(sub_mch_id, null, orderSn, transaction_id);
// 			if (Objects.isNull(order)) {
// 				return dataUtil.getMessage(TencentPayResult.FAIL, "ERROR DATA FAIL");
// 			}
// 			Merchant merchant = mchService.getMerchat(order.getCompanyNo(), order.getCommunityNo());
// 			if (!signature.checkIsSignValidFromResponseString(jsonObject, merchant.getMchSecret())) {
// 				return dataUtil.getMessage(TencentPayResult.FAIL, "SIGN CHECK FAIL");
// 			}
// 			// 避免重复通知
// 			if (!order.isPaid()) {
// 				int sendCount = order.getSendCount();
// 				if (sendCount < 15) { // 默认通知15次，通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h
// 					order.setSendCount(++sendCount);
//
// 					String appSecret = oauth2Service.getSecret(order.getCompanyNo());
// 					String sign = MD5.MD5Encode(orderSn+ total_fee + appSecret);
// 					jsonObject.put("sign", sign);
// 					jsonObject.put("sign_type", SignType.MD5);
//
// 					HttpClient httpClient = HttpClient.create(order.getCallbackUrl());
// 					httpClient.setBody(jsonObject.toJSONString());
// 					String text = httpClient.get();
// 					if ("SUCCESS".equalsIgnoreCase(text)){
// 						setPaidContractEntrustOrder(order, jsonObject);
// 						jdbcSession.updateById(order);
// 						return dataUtil.getMessage(TencentPayResult.SUCCESS);
// 					}
// 					jdbcSession.updateById(order);
// 				}
// 				return null;
// 			} else {
// 				System.out.println("===============================");
// 				return dataUtil.getMessage(TencentPayResult.SUCCESS);
// 			}
// 		};
//
// 		String resultText = (String)Locks.exeSyn(orderSn, result);
// 		if (Objects.isEmpty(resultText)) {
// 			resultText = dataUtil.getMessage(TencentPayResult.FAIL, "FAIL");
// 		}
//
// 		// 默认失败，使用微信的通知次数
// 		return Result.text(result);
// 	}
//
//
// 	public Object unifiedOrder(Map<String, String> params, String companyNo, String communityNo, String chargeTypeId, String payType) throws Exception {
// 		String out_trade_no = params.get("out_trade_no");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String body = params.get("body");
// 		String total_fee = params.get("total_fee");
// 		String spbill_create_ip = params.get("spbill_create_ip");
// 		String notify_url = params.get("notify_url");
// 		String openid = params.get("openid");
// 		String sub_openid = params.get("sub_openid");
// 		String sub_appid = params.get("sub_appid");
//
// 		if (Objects.isEmpty(out_trade_no)
// 			|| Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(body)
// 			|| Objects.isEmpty(total_fee)
// 			|| Objects.isEmpty(spbill_create_ip)
// 			|| Objects.isEmpty(notify_url)
// 			|| Objects.isEmpty(payType)
// 			|| (Objects.isEmpty(openid) && Objects.isEmpty(sub_openid))
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = null;
// 		if (payType.equalsIgnoreCase(PayTypeEnum.wxpay_mp.name())) {
// 			merchant = mchService.getMerchatByMp(companyNo, communityNo);
// 		} else {
// 			merchant = mchService.getMerchat(companyNo, communityNo);
// 		}
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdOrder thirdOrder = getThirdOrder(sub_mch_id, null, out_trade_no, null);
// 		if (Objects.nonNull(thirdOrder)){
// 			return Result.error(215008, "out_trade_no已存在，请更换后重试");
// 		}
//
// 		String orderSn = IdGeneratorUtil.generate();
// 		// 创建订单
// 		thirdOrder = Pool.newInstance(ThirdOrder.class, orderSn);
// 		thirdOrder.setAppId(merchant.getAppId());
// 		thirdOrder.setSubAppId(sub_appid);
// 		thirdOrder.setMchId(merchant.getMchId());
// 		thirdOrder.setSubMchId(sub_mch_id);
// 		thirdOrder.setSubOrderNo(out_trade_no);
// 		thirdOrder.setPayType(PayTypeEnum.valueOf(payType));
// 		thirdOrder.setOrderFee(Integer.parseInt(total_fee));
// 		thirdOrder.setPaid(false);
// 		thirdOrder.setCallbackUrl(notify_url);
// 		thirdOrder.setPayerUser(Objects.nonEmpty(openid)? openid : sub_openid);
// 		thirdOrder.setIp(spbill_create_ip);
// 		thirdOrder.setAttach(params.get("attach"));
// 		thirdOrder.setCompanyNo(companyNo);
// 		thirdOrder.setCommunityNo(communityNo);
// 		thirdOrder.setChargeTypeId(chargeTypeId);
// 		thirdOrder.setProfitSharing(params.get("profit_sharing"));
// 		jdbcSession.insert(thirdOrder);
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params.put("notify_url", logicConfig.getUrl("/oau-kht/pay/v2/callback")); // 通知地址重置成我们的接口
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		System.out.println(toXml);
// 		JSONObject jsonObject = payConfig.postXML("/pay/unifiedorder", http -> http.setBody(toXml));
//
// 		logger.trace("#######################微信创建订单回调本地解析后结果: {} ##########################", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))) {
// 			String prepay_id = jsonObject.getString("prepay_id");
// 			String codeUrl = jsonObject.getString("code_url");
// 			long ts = TimeUtil.timeSec();
//
// 			String appId = Objects.nonEmpty(sub_appid) ? sub_appid : merchant.getAppId();
// 			// 返回参数到前端
// 			JSONObject resultJson = new JSONObject();
// 			resultJson.put("appId", appId);
// 			resultJson.put("nonceStr", nonce_str);
// 			resultJson.put("package", "prepay_id=" + prepay_id);
// 			resultJson.put("signType", SignType.MD5);
// 			resultJson.put("timeStamp", ts);
// 			resultJson.put("paySign", getSign0(appId, merchant.getMchSecret(), nonce_str, prepay_id, ts));
// 			resultJson.put("orderNo", out_trade_no);
// 			resultJson.put("codeUrl", codeUrl);
// 			logger.trace("#######################微信回调本地解析成功：{}##########################", resultJson.toJSONString());
// 			return Result.success(resultJson);
// 		}
//
// 		return Result.error(215002, jsonObject.getString("return_msg"));
// 	}
//
//
// 	public Object unifiedQuery(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String out_trade_no = params.get("out_trade_no");
// 		String transaction_id = params.get("transaction_id");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| (Objects.isEmpty(out_trade_no) && Objects.isEmpty(transaction_id))
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdOrder order = getThirdOrder(sub_mch_id, null, out_trade_no, transaction_id);
// 		if (Objects.isNull(order)){
// 			return Result.error(215008, "订单不存在，请检查相关参数后重试");
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/orderquery", http -> http.setBody(toXml));
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 				&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 				&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("trade_state"))
// 			) {
// 				setPaidOrder(order, jsonObject);
// 				jdbcSession.updateById(order);
// 			}
// 		return Result.success(jsonObject);
// 	}
//
//
// 	public Object v2Callback(JSONObject jsonObject) throws Exception {
// 		String orderSn = jsonObject.getString("out_trade_no");
//
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		CallBackReturn<String> result = ()->{
// 			logger.info("=========v2Callback:{}=========", jsonObject.toJSONString());
// 			String sub_mch_id = jsonObject.getString("sub_mch_id");
// 			String transaction_id = jsonObject.getString("transaction_id");
// 			String total_fee = jsonObject.getString("total_fee");
// 			ThirdOrder order = getThirdOrder(sub_mch_id, null, orderSn, transaction_id);
// 			if (Objects.isNull(order)) {
// 				return dataUtil.getMessage(TencentPayResult.FAIL, "ERROR DATA FAIL");
// 			}
// 			Merchant merchant = mchService.getMerchat(order.getCompanyNo(), order.getCommunityNo());
// 			if (!signature.checkIsSignValidFromResponseString(jsonObject, merchant.getMchSecret())) {
// 				return dataUtil.getMessage(TencentPayResult.FAIL, "SIGN CHECK FAIL");
// 			}
// 			// 避免重复通知
// 			if (!order.isPaid()) {
// 				int sendCount = order.getSendCount();
// 				if (sendCount < 15) { // 默认通知15次，通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h
// 					order.setSendCount(++sendCount);
//
// 					String appSecret = oauth2Service.getSecret(order.getCompanyNo());
// 					String sign = MD5.MD5Encode(orderSn+ total_fee + appSecret);
// 					jsonObject.put("sign", sign);
// 					jsonObject.put("sign_type", SignType.MD5);
//
// 					HttpClient httpClient = HttpClient.create(order.getCallbackUrl());
// 					httpClient.setBody(jsonObject.toJSONString());
// 					String text = httpClient.get();
// 					if ("SUCCESS".equalsIgnoreCase(text)){
// 						setPaidOrder(order, jsonObject);
// 						jdbcSession.updateById(order);
// 						return dataUtil.getMessage(TencentPayResult.SUCCESS, "OK");
// 					}
// 					jdbcSession.updateById(order);
// 				}
// 				return null;
// 			} else {
// 				return dataUtil.getMessage(TencentPayResult.SUCCESS, "OK");
// 			}
// 		};
//
// 		String resultText = (String)Locks.exeSyn(orderSn, result);
// 		if (Objects.isEmpty(resultText)) {
// 			resultText = dataUtil.getMessage(TencentPayResult.FAIL, "FAIL");
// 		}
// 		// 默认失败，使用微信的通知次数
// 		return Result.text(result);
// 	}
//
//
// 	public Object v2RefundCallback(JSONObject jsonObject) throws Exception {
//
// 		if (!TencentPayResult.isOk(jsonObject, "return_code", "result_code")) {
// 			String result = dataUtil.getMessage(TencentPayResult.FAIL, "BUINESS FAIL");
// 			return Result.text(result);
// 		}
//
// 		String mch_id = jsonObject.getString("mch_id");
// 		String sub_mch_id = jsonObject.getString("sub_mch_id");
//
// 		MerchantSetting merchantSetting = mchService.getParentMerchantSetting(mch_id);
// 		if (Objects.isNull(merchantSetting)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		String req_info = jsonObject.getString("req_info");
//
// 		final String keyMd5String = MD5.MD5Encode(merchantSetting.getMchSecret()).toLowerCase();
// 		SecretKeySpec key = new SecretKeySpec(keyMd5String.getBytes(StandardCharsets.UTF_8), "AES");
//
// 		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 		cipher.init(Cipher.DECRYPT_MODE, key);
// 		String decryptedReqInfo = new String(cipher.doFinal(Base64.decodeFast(req_info)), StandardCharsets.UTF_8);
// 		JSONObject decryptedJson = XmlUtil.xml2JSON(decryptedReqInfo);
// 		logger.info("=========v2RefundCallback:{}=========", decryptedJson.toJSONString());
// 		logger.info("=========v2RefundCallback:{}=========", jsonObject.toJSONString());
//
// 		String out_refund_no = decryptedJson.getString("out_refund_no");
// 		ThirdRefundOrder refundOrder = getThirdRefundOrder(sub_mch_id, null, out_refund_no, null, null, null);
// 		if (Objects.isNull(refundOrder)) {
// 			return Result.error(215006, "该笔订单已发起退款，请勿重复发起");
// 		}
//
// 		CallBackReturn<String> result = ()->{
// 			// 避免重复通知
// 			if (!refundOrder.isRefunded()) {
// 				int sendCount = refundOrder.getSendCount();
// 				if (sendCount < 15) { // 默认通知15次，通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h
// 					refundOrder.setSendCount(++sendCount);
//
// 					String appSecret = oauth2Service.getSecret(refundOrder.getCompanyNo());
// 					String sign = MD5.MD5Encode(out_refund_no + refundOrder.getRefundFee() + appSecret);
// 					jsonObject.put("sign", sign);
// 					jsonObject.put("sign_type", SignType.MD5);
//
// 					HttpClient httpClient = HttpClient.create(refundOrder.getCallbackUrl());
// 					httpClient.setBody(decryptedJson.toJSONString());
// 					String text = httpClient.get();
// 					if ("SUCCESS".equalsIgnoreCase(text)){
// 						refundOrder.setRefundTime(LocalDateTime.parse(decryptedJson.getString("success_time"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// 						refundOrder.setRefunded(true);
// 						jdbcSession.updateById(refundOrder);
// 						return dataUtil.getMessage(TencentPayResult.SUCCESS);
// 					}
// 					jdbcSession.updateById(refundOrder);
// 				}
// 				return null;
// 			} else {
// 				return dataUtil.getMessage(TencentPayResult.SUCCESS);
// 			}
// 		};
//
// 		String resultText = (String)Locks.exeSyn(out_refund_no, result);
// 		if (Objects.isEmpty(resultText)) {
// 			// 默认失败，使用微信的通知次数
// 			resultText = dataUtil.getMessage(TencentPayResult.FAIL, "FAIL");
// 		}
//
// 		return Result.text(result);
// 	}
//
//
// 	public Object unifiedClose(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		return null;
// 	}
//
//
// 	public Object unifiedRefund(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String transaction_id = params.get("transaction_id");
// 		String out_trade_no = params.get("out_trade_no");
// 		String out_refund_no = params.get("out_refund_no");
// 		String total_fee = params.get("total_fee");
// 		String refund_fee = params.get("refund_fee");
// 		String notify_url = params.get("notify_url");
//
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(transaction_id) && Objects.isEmpty(out_trade_no)
// 			|| Objects.isEmpty(out_refund_no)
// 			|| Objects.isEmpty(total_fee)
// 			|| Objects.isEmpty(refund_fee)
// 			|| Objects.isEmpty(notify_url)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdRefundOrder refundOrder = getThirdRefundOrder(sub_mch_id, null, out_refund_no, null, out_trade_no, transaction_id);
// 		if (Objects.nonNull(refundOrder)) {
// 			return Result.error(215006, "该笔订单已发起退款，请勿重复发起");
// 		} else {
// 			String refundOrderNo = IdGeneratorUtil.generate();
// 			refundOrder = Pool.newInstance(ThirdRefundOrder.class, refundOrderNo);
// 			refundOrder.setOrderNo(out_trade_no);
// 			refundOrder.setOrderFee(Integer.parseInt(total_fee));
// 			refundOrder.setAppId(merchant.getAppId());
// 			refundOrder.setMchId(merchant.getMchId());
// 			refundOrder.setSubMchId(sub_mch_id);
// 			refundOrder.setSubRefundNo(out_refund_no);
// 			refundOrder.setRefunded(false);
// 			refundOrder.setCallbackUrl(notify_url);
// 			refundOrder.setRefundFee(Integer.parseInt(refund_fee));
// 			refundOrder.setCompanyNo(companyNo);
// 			refundOrder.setCommunityNo(communityNo);
// 			jdbcSession.insert(refundOrder);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params.put("notify_url", logicConfig.getUrl("/oau-kht/pay/v2/refund/callback")); // 通知地址重置成我们的接口
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
//
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/refund",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> {
// 				http.setBody(toXml);
// 			});
// 		// 退款相关
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 		&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			refundOrder.setRefundOutSn(jsonObject.getString("refund_id"));
// 			refundOrder.setOutSn(jsonObject.getString("transaction_id"));
// 			jdbcSession.updateById(refundOrder);
//
// 			return Result.success(jsonObject);
// 		}
// 		return Result.error(215007, jsonObject.getString("return_msg"));
// 	}
//
//
// 	public Object unifiedRefundQuery(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String out_trade_no = params.get("out_trade_no");
// 		String transaction_id = params.get("transaction_id");
// 		String out_refund_no = params.get("out_refund_no");
// 		String refund_id = params.get("refund_id");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| (Objects.isEmpty(out_trade_no)
// 				&& Objects.isEmpty(transaction_id)
// 				&& Objects.isEmpty(out_refund_no)
// 				&& Objects.isEmpty(refund_id)
// 				)
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ThirdRefundOrder refundOrder = getThirdRefundOrder(sub_mch_id, null, out_refund_no, refund_id, out_trade_no, transaction_id);
// 		if (Objects.isNull(refundOrder)) {
// 			return Result.error(215006, "该笔订单已发起退款，请勿重复发起");
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/refundquery", http -> http.setBody(toXml));
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			refundOrder.setRefundOutSn(jsonObject.getString("refund_id"));
// 			refundOrder.setOutSn(jsonObject.getString("transaction_id"));
// 			jdbcSession.updateById(refundOrder);
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001);
// 	}
//
//
// 	public Object unifiedDownloadBill(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		return null;
// 	}
//
//
// 	public Object profitSharing(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String receivers = params.get("receivers");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String transaction_id = params.get("transaction_id");
// 		String out_order_no = params.get("out_order_no");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(transaction_id)
// 			|| Objects.isEmpty(out_order_no)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharing profitSharing = getProfitSharing(companyNo, sub_mch_id, transaction_id, out_order_no);
// 		if (Objects.isNull(profitSharing)){
// 			profitSharing = Pool.newInstance(ProfitSharing.class, IdGeneratorUtil.generate());
// 			profitSharing.setApp_id(merchant.getAppId());
// 			profitSharing.setMch_id(merchant.getMchId());
// 			profitSharing.setSub_app_id(params.get("sub_app_id"));
// 			profitSharing.setSub_mch_id(sub_mch_id);
// 			profitSharing.setTransaction_id(transaction_id);
// 			profitSharing.setOut_order_no(out_order_no);
// 			profitSharing.setReceivers(receivers);
// 			profitSharing.setMulti(false);
// 			profitSharing.setStatus(SharingReceiverStatusEnum.INIT);
// 			profitSharing.setCompanyNo(companyNo);
// 			profitSharing.setCommunityNo(communityNo);
// 			jdbcSession.insert(profitSharing);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		logger.info("==========单次分账：{}=============", toXml);
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/profitsharing",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> http.setBody(toXml));
// 		logger.info("============单次分账返回：{}=============", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.FINISHED);
// 			profitSharing.setOrder_id(jsonObject.getString("order_id"));
// 			jdbcSession.updateById(profitSharing);
// 			return PayResult.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
// 	private ProfitSharing getProfitSharing(String companyNo, String sub_mch_id, String transaction_id, String out_order_no) {
// 		return jdbcSession.findOne(ProfitSharing.class)
// 						  .eq("companyNo", companyNo)
// 						  .eq("sub_mch_id", sub_mch_id)
// 						  .eq("transaction_id", transaction_id)
// 						  .eq("out_order_no", out_order_no)
// 						  .exe();
// 	}
//
//
// 	public Object multiProfitSharing(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String receivers = params.get("receivers");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String transaction_id = params.get("transaction_id");
// 		String out_order_no = params.get("out_order_no");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(transaction_id)
// 			|| Objects.isEmpty(out_order_no)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharing profitSharing = getProfitSharing(companyNo, sub_mch_id, transaction_id, out_order_no);
// 		if (Objects.isNull(profitSharing)){
// 			profitSharing = Pool.newInstance(ProfitSharing.class, IdGeneratorUtil.generate());
// 			profitSharing.setApp_id(merchant.getAppId());
// 			profitSharing.setMch_id(merchant.getMchId());
// 			profitSharing.setSub_app_id(params.get("sub_app_id"));
// 			profitSharing.setSub_mch_id(sub_mch_id);
// 			profitSharing.setTransaction_id(transaction_id);
// 			profitSharing.setOut_order_no(out_order_no);
// 			profitSharing.setReceivers(receivers);
// 			profitSharing.setMulti(true);
// 			profitSharing.setStatus(SharingReceiverStatusEnum.INIT);
// 			profitSharing.setCompanyNo(companyNo);
// 			profitSharing.setCommunityNo(communityNo);
// 			jdbcSession.insert(profitSharing);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject rs = XmlUtil.xml2JSON(toXml);
// 		logger.info("==========多次分账：{}=============", rs.toJSONString());
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/multiprofitsharing",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> http.setBody(toXml));
// 		logger.info("============多次分账返回：{}=============", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.FINISHED);
// 			profitSharing.setOrder_id(jsonObject.getString("order_id"));
// 			jdbcSession.updateById(profitSharing);
// 			return PayResult.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object profitSharingQuery(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String out_order_no = params.get("out_order_no");
// 		String transaction_id = params.get("transaction_id");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(out_order_no)
// 			|| Objects.isEmpty(transaction_id)
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharing profitSharing = getProfitSharing(companyNo, sub_mch_id, transaction_id, out_order_no);
// 		if (Objects.isNull(profitSharing)){
// 			return Result.error(215008, "订单不存在，请检查相关参数后重试");
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.MD5);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/profitsharingquery", http -> http.setBody(toXml));
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 			&& SharingReceiverStatusEnum.FINISHED.name().equalsIgnoreCase(jsonObject.getString("status"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.valueOf(jsonObject.getString("status")));
// 			jdbcSession.updateById(profitSharing);
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object profitSharingAddReceiver(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String sub_mch_id = params.get("sub_mch_id");
// 		JSONObject receiverJson = JSONObject.parseObject(params.get("receiver"));
// 		String type = receiverJson.getString("type");
// 		String account = receiverJson.getString("account");
// 		if (Objects.isEmpty(type)
// 			|| Objects.isEmpty(account)
// 			|| Objects.isEmpty(sub_mch_id)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		SharingReceiver sharingReceiver = getSharingReceiver(sub_mch_id, account, companyNo);
// 		if (Objects.nonNull(sharingReceiver)){
// 			// 微信支付可以重复请求，故逻辑删除旧数据
// 			sharingReceiver.setDeleted(true);
// 			jdbcSession.updateById(sharingReceiver);
// 		}
//
// 		// 插入数据
// 		sharingReceiver = Pool.newInstance(SharingReceiver.class);
// 		sharingReceiver.setAppId(merchant.getAppId());
// 		sharingReceiver.setMchId(merchant.getMchId());
// 		sharingReceiver.setSubAppId(params.get("sub_appid"));
// 		sharingReceiver.setSubMchId(sub_mch_id);
// 		sharingReceiver.setType(type);
// 		sharingReceiver.setAccount(account);
// 		sharingReceiver.setCommunityNo(communityNo);
// 		sharingReceiver.setCompanyNo(companyNo);
// 		jdbcSession.insert(sharingReceiver);
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/profitsharingaddreceiver", http -> http.setBody(toXml));
// 		logger.debug("============添加分账接收方返回数据：{}=============", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			return PayResult.success(jsonObject);
// 		}
// 		sharingReceiver.setDeleted(true);
// 		jdbcSession.updateById(sharingReceiver);
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
// 	private SharingReceiver getSharingReceiver(String subMchId, String account, String companyNo){
// 		return jdbcSession.findOne(SharingReceiver.class)
// 						  .eq("subMchId", subMchId)
// 						  .eq("account", account)
// 						  .eq("companyNo", companyNo)
// 						  .eq("deleted", false)
// 						  .exe();
// 	}
//
//
// 	public Object profitSharingDelReceiver(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String receiver = params.get("receiver");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		JSONObject receiverJson = JSONObject.parseObject(receiver);
// 		String type = receiverJson.getString("type");
// 		String account = receiverJson.getString("account");
// 		if (Objects.isEmpty(type)
// 			|| Objects.isEmpty(account)
// 			|| Objects.isEmpty(sub_mch_id)
// 		) {
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		SharingReceiver sharingReceiver = getSharingReceiver(sub_mch_id, account, companyNo);
// 		if (Objects.nonNull(sharingReceiver)){
// 			PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)) {
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/profitsharingremovereceiver", http -> http.setBody(toXml));
// 		logger.debug("============添加分账接收方返回数据：{}=============", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			sharingReceiver.setDeleted(true);
// 			jdbcSession.updateById(sharingReceiver);
// 			return PayResult.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object profitSharingFinish(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String out_order_no = params.get("out_order_no");
// 		String transaction_id = params.get("transaction_id");
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String description = params.get("description");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(out_order_no)
// 			|| Objects.isEmpty(transaction_id)
// 			|| Objects.isEmpty(description)
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = PayUtil.generateNonceStr();
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharing profitSharing = getProfitSharing(companyNo, sub_mch_id, transaction_id, out_order_no);
// 		if (Objects.isNull(profitSharing)){
// 			profitSharing = Pool.newInstance(ProfitSharing.class, IdGeneratorUtil.generate());
// 			profitSharing.setApp_id(merchant.getAppId());
// 			profitSharing.setMch_id(merchant.getMchId());
// 			profitSharing.setSub_app_id(params.get("sub_app_id"));
// 			profitSharing.setSub_mch_id(sub_mch_id);
// 			profitSharing.setTransaction_id(transaction_id);
// 			profitSharing.setOut_order_no(out_order_no);
// 			profitSharing.setReceivers(null);
// 			profitSharing.setMulti(false);
// 			profitSharing.setStatus(SharingReceiverStatusEnum.INIT);
// 			profitSharing.setCommunityNo(communityNo);
// 			profitSharing.setCompanyNo(companyNo);
// 			jdbcSession.insert(profitSharing);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/profitsharingfinish",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> http.setBody(toXml));
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.FINISHED);
// 			profitSharing.setOrder_id(jsonObject.getString("order_id"));
// 			jdbcSession.updateById(profitSharing);
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object preProfitSharingQuery(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String transaction_id = params.get("transaction_id");
// 		if (Objects.isEmpty(transaction_id)){
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = String.valueOf(ThreadLocalRandom.current().nextLong(Integer.MAX_VALUE, Long.MAX_VALUE));
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		JSONObject jsonObject = payConfig.postXML("/pay/profitsharingorderamountquery", http -> http.setBody(toXml));
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
//
// 	public Object profitSharingReturn(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String order_id = params.get("order_id");
// 		String out_order_no = params.get("out_order_no");
// 		String out_return_no = params.get("out_return_no");
// 		String return_account_type = params.get("return_account_type");
// 		String return_account = params.get("return_account");
// 		String return_amount = params.get("return_amount");
// 		String description = params.get("description");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| (Objects.isEmpty(order_id) && Objects.isEmpty(out_order_no))
// 			|| Objects.isEmpty(out_return_no)
// 			|| Objects.isEmpty(return_account_type)
// 			|| Objects.isEmpty(return_account)
// 			|| Objects.isEmpty(return_amount)
// 			|| Objects.isEmpty(description)
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = PayUtil.generateNonceStr();
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharingReturn profitSharing = getProfitSharingReturn(companyNo, sub_mch_id, order_id, out_order_no, out_return_no);
// 		if (Objects.isNull(profitSharing)){
// 			profitSharing = Pool.newInstance(ProfitSharingReturn.class, IdGeneratorUtil.generate());
// 			profitSharing.setApp_id(merchant.getAppId());
// 			profitSharing.setMch_id(merchant.getMchId());
// 			profitSharing.setSub_app_id(params.get("sub_app_id"));
// 			profitSharing.setSub_mch_id(sub_mch_id);
// 			profitSharing.setOrder_id(order_id);
// 			profitSharing.setOut_order_no(out_order_no);
// 			profitSharing.setOut_return_no(out_return_no);
// 			profitSharing.setReturn_account_type(return_account_type);
// 			profitSharing.setReturn_account(return_account);
// 			profitSharing.setReturn_amount(return_amount);
// 			profitSharing.setCommunityNo(communityNo);
// 			profitSharing.setCompanyNo(companyNo);
// 			profitSharing.setStatus(SharingReceiverStatusEnum.INIT);
// 			profitSharing.setDescription(description);
// 			jdbcSession.insert(profitSharing);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		logger.info("===分账回退请求微信支付参数：{}===", toXml);
// 		JSONObject jsonObject = payConfig.postXML("/secapi/pay/profitsharingreturn",
// 			merchant.getSslContext().getSocketFactory(),
// 			http -> http.setBody(toXml));
// 		logger.info("===分账回退请求微信支付返回参数：{}===", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.FINISHED);
// 			profitSharing.setOrder_id(jsonObject.getString("order_id"));
// 			profitSharing.setOut_order_no(jsonObject.getString("out_order_no"));
// 			profitSharing.setReturn_no(jsonObject.getString("return_no"));
// 			profitSharing.setFinish_time(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("finish_time")));
// 			jdbcSession.updateById(profitSharing);
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
// 	/**
// 	 * 获取分账回退单号
// 	 *
// 	 * @param companyNo 公司编号
// 	 * @param sub_mch_id 子商户号
// 	 * @param order_id 微信分账单号
// 	 * @param out_order_no 商户分账单号
// 	 * @param out_return_no 商户回退单号
// 	 * @return
// 	 */
// 	private ProfitSharingReturn getProfitSharingReturn(String companyNo, String sub_mch_id, String order_id, String out_order_no, String out_return_no) {
//
// 		FindOne<ProfitSharingReturn> findOne = jdbcSession.findOne(ProfitSharingReturn.class)
// 														  .eq("companyNo", companyNo)
// 														  .eq("sub_mch_id", sub_mch_id)
// 														  .eq("out_return_no", out_return_no);
//
// 		if (Objects.nonEmpty(order_id)) {
// 			findOne.eq("order_id", order_id);
// 		}
// 		if (Objects.nonEmpty(out_order_no)) {
// 			findOne.eq("out_order_no", out_order_no);
// 		}
// 		return findOne.exe();
// 	}
//
//
// 	public Object profitSharingReturnQuery(Map<String, String> params, String companyNo, String communityNo) throws Exception {
// 		String sub_mch_id = params.get("sub_mch_id");
// 		String order_id = params.get("order_id");
// 		String out_return_no = params.get("out_return_no");
// 		if (Objects.isEmpty(sub_mch_id)
// 			|| Objects.isEmpty(out_return_no)
// 		) {
// 			return Result.error(215111, "请输入必填参数！");
// 		}
//
// 		String nonce_str = params.get("nonce_str");
// 		if (Objects.isEmpty(nonce_str)){
// 			nonce_str = PayUtil.generateNonceStr();
// 			params.put("nonce_str", nonce_str);
// 		}
//
// 		Merchant merchant = mchService.getMerchat(companyNo, communityNo);
// 		if (Objects.isNull(merchant)) {
// 			return Result.error(215003, "商户参数不正确，请联系技术人员");
// 		}
//
// 		ProfitSharingReturn profitSharing = getProfitSharingReturn(companyNo, sub_mch_id, order_id, null, out_return_no);
// 		if (Objects.isNull(profitSharing)){
// 			return PayResult.error(PayErrorCode.E215001);
// 		}
//
// 		params.put("appid", merchant.getAppId());
// 		params.put("mch_id", merchant.getMchId());
// 		params = WxPayUtil.buildSign(params, merchant.getMchSecret(), SignType.HMAC_SHA256);
// 		String toXml = PayUtil.toXml(params);
// 		logger.info("===分账回退查询请求微信支付参数：{}===", toXml);
// 		JSONObject jsonObject = payConfig.postXML("/pay/profitsharingreturnquery", http -> http.setBody(toXml));
// 		logger.info("===分账回退查询请求微信支付返回参数：{}===", jsonObject.toJSONString());
// 		if (TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("return_code"))
// 			&& TencentPayResult.SUCCESS.equipsAll(jsonObject.getString("result_code"))
// 		) {
// 			profitSharing.setStatus(SharingReceiverStatusEnum.FINISHED);
// 			profitSharing.setOrder_id(jsonObject.getString("order_id"));
// 			profitSharing.setOut_order_no(jsonObject.getString("out_order_no"));
// 			profitSharing.setFinish_time(Java8TimeUtils.parseFromTimeEnd(jsonObject.getString("time_end")));
// 			jdbcSession.updateById(profitSharing);
// 			return Result.success(jsonObject);
// 		}
// 		return PayResult.error(PayErrorCode.E215001, jsonObject);
// 	}
//
// 	private ThirdOrder getThirdOrder(String subMchId, String orderNo, String subOrderNo, String outSn) {
// 		if (Objects.nonEmpty(orderNo)) {
// 			return Pool.get(ThirdOrder.class, orderNo);
// 		}
// 		FindOne<ThirdOrder> find = jdbcSession.findOne(ThirdOrder.class)
// 											  // .eq("appId", appId)
// 											  // .eq("mchId", mchId)
// 											  .eq("subMchId", subMchId);
// 		if (Objects.nonEmpty(subOrderNo)) {
// 			find.eq("subOrderNo", subOrderNo);
// 		} else if (Objects.nonEmpty(outSn)) {
// 			find.eq("outSn", outSn);
// 		} else {
// 			return null;
// 		}
//
// 		return find.exe();
// 	}
//
// 	private ContractEntrustOrder getContractEntrustOrder(String subMchId, String orderNo, String subOrderNo, String outSn) {
// 		if (Objects.nonEmpty(orderNo)) {
// 			return Pool.get(ContractEntrustOrder.class, orderNo);
// 		}
// 		FindOne<ContractEntrustOrder> find = jdbcSession.findOne(ContractEntrustOrder.class)
// 											  // .eq("appId", appId)
// 											  // .eq("mchId", mchId)
// 											  .eq("subMchId", subMchId);
// 		if (Objects.nonEmpty(subOrderNo)) {
// 			find.eq("subOrderNo", subOrderNo);
// 		} else if (Objects.nonEmpty(outSn)) {
// 			find.eq("outSn", outSn);
// 		} else {
// 			return null;
// 		}
//
// 		return find.exe();
// 	}
//
// 	private ThirdRefundOrder getThirdRefundOrder(String subMchId, String refundNo, String subRefundNo, String refundOutSn, String orderNo, String outSn) {
// 		if (Objects.nonEmpty(refundNo)) {
// 			return Pool.get(ThirdRefundOrder.class, refundNo);
// 		}
// 		FindOne<ThirdRefundOrder> find = jdbcSession.findOne(ThirdRefundOrder.class)
// 											  // .eq("appId", merchant.getAppId())
// 											  // .eq("mchId", merchant.getMchId())
// 											  .eq("subMchId", subMchId);
// 		if (Objects.nonEmpty(refundOutSn)) {
// 			find.eq("refundOutSn", refundOutSn);
// 		} else if (Objects.nonEmpty(subRefundNo)) {
// 			find.eq("subRefundNo", subRefundNo);
// 		} else if (Objects.nonEmpty(orderNo)) {
// 			find.eq("orderNo", orderNo);
// 		} else if (Objects.nonEmpty(outSn)) {
// 			find.eq("outSn", outSn);
// 		} else {
// 			return null;
// 		}
//
// 		return find.exe();
// 	}
// }
